package server.services;

import java.util.List;

import model.Usuario;
import server.dao.InvitacionesDAO;
import server.exception.ServiceException;
import server.model.Invitacion;

/**
 * Esta clase encapsula las acciones que pueden realizarse sobre las
 * invitaciones. Todo aquel que desea obtener algun dato de las invitaciones
 * persistidas deberia pedirselo a esta clase
 * 
 * @author romeroy
 * 
 */
public class InvitacionesService {
	private static InvitacionesDAO DAO;

	public InvitacionesService(){
		if(InvitacionesService.DAO == null)
			InvitacionesService.DAO = new InvitacionesDAO();
	}
	/**
	 * Obtiene una invitacion identificada por el id pasado por parametro
	 * 
	 * @param id
	 *            Identificacion de invitacion
	 * @return Invitacion identificada por ID de usuario
	 * @throws ServiceException
	 *             En caso de no poder completarse la accion
	 */
	public List<Invitacion> obtener(int id) throws Exception {
		return DAO.obtener(id);
	}

	/**
	 * Obtiene una lista con todas las invitaciones pendientes
	 * 
	 * @return Lista de invitaciones pendientes
	 * @throws ServiceException
	 *             En caso de no poder completarse la accion
	 */
	public List<Invitacion> todos() throws Exception {
		return DAO.todos();
	}

	/**
	 * Obtiene una lista de invitaciones destinadas al usuario pasado por
	 * parametro
	 * 
	 * @param usuario
	 *            Usuario del que se quiere saber sus invitaciones
	 * @return Lista de invitaciones pendientes para el usuario
	 * @throws ServiceException
	 *             En caso de no poder completarse la accion
	 */
	public List<Invitacion> invitacionesPara(Usuario usuario)
			throws Exception {
		return DAO.invitacionesPara(usuario);
	}

	/**
	 * Obtiene una lista de invitaciones realizadas por determinado usuario
	 * 
	 * @param usuario
	 *            Usuario que realizo las invitaciones
	 * @return Lista de invitaciones realizadas por el usuario
	 * @throws ServiceException
	 *             En caso de no poder completarse la accion
	 */
	public List<Invitacion> invitacionesDe(Usuario usuario)
			throws Exception {
		return DAO.invitacionesDe(usuario);
	}

	/**
	 * Se acepta la invitacion pasada por parametro
	 * 
	 * @param invitacion
	 *            Invitacion aceptada
	 * @return true en caso de realizarse la accion, falso en caso contrario
	 * @throws ServiceException
	 *             En caso de no poder completarse la accion
	 */
	public boolean aceptar(Invitacion invitacion) throws Exception {
		return DAO.aceptar(invitacion);
	}

	/**
	 * Rechaza una invitacion
	 * 
	 * @param invitacion
	 *            Invitacion a rechazar
	 * @return true en caso de exito, false en caso contrario
	 * @throws ServiceException
	 *             En caso de no poder completar la accion
	 */
	public boolean rechazar(Invitacion invitacion) throws Exception {
		return DAO.rechazar(invitacion);
	}
}
